#include <iostream>
using namespace std;

template <typename T>
class C
{
public:
    T mem;
    C(T mem) : mem{mem} {}
    // 1、这样实例化的时候无法找到友元函数
    // friend void f(C<T> &c);
    // 2、使用友元模板解决：就是声明友元函数的时候也使用模板
    template <typename K>
    friend void f(C<K> &c);
};

template <typename K>
void f(C<K> &c)
{
    c.mem += 1;
}

int main()
{
    C<int> c(1);
    f(c);
    cout << c.mem << endl;
    return 0;
}
